/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;
import dominio.Administrador;
import java.util.Collection;
import javax.persistence.*;

/**
 *
 * @author eagle
 */
public class AdministradorDao {
    private EntityManager em;

public Administrador crearAdministrador(String nombreAdm, String apellidoAdm, String nombreUsuario) {
            Administrador a = new Administrador(nombreAdm, apellidoAdm, nombreUsuario);
            EntityManagerFactory emf =
                    Persistence.createEntityManagerFactory("SiaPersistencia");
            this.em = emf.createEntityManager();
            em.getTransaction().begin();
            a.setId(1);
            em.persist(a);
            em.getTransaction().commit();
            em.close();
            emf.close();
            return a;
    }
    public Administrador encontrarAdministrador(String nombreUsuario){
        EntityManagerFactory emf =
                Persistence.createEntityManagerFactory("SiaPersistencia");
        this.em = emf.createEntityManager();
        Query q = em.createQuery("SELECT u FROM Administrador u WHERE u.nombreUsuario='"+nombreUsuario+"'");// con esta funcion se buscas un dato por primary key, el primer parametro es nuestra clase entidad
        Administrador a = (Administrador) q.getSingleResult();
        em.close();
        emf.close();
        return a;
    }
    public void borrarAdministrador(String nombreUsuario) {
        EntityManagerFactory emf =
                Persistence.createEntityManagerFactory("SiaPersistencia");
        this.em = emf.createEntityManager();
        em.getTransaction().begin();
        Administrador u = em.find(Administrador.class, nombreUsuario);//en este caso podemos borrar un Administrador por nombre
            if (u != null) {//si no lo encuentra por supuesto no lo intenta borrar
            em.remove(u);// borra de la tabla ese registro
            }
        em.getTransaction().commit();
        em.close();
        emf.close();
    }
    public Administrador actualizarAdministrador(String nombreAdministrador, String claveNueva) {
            EntityManagerFactory emf =
                    Persistence.createEntityManagerFactory("SiaPersistencia");
            this.em = emf.createEntityManager();
            em.getTransaction().begin();
            Administrador u = em.find(Administrador.class, nombreAdministrador ); //se usa el entity manager para encontrarlo luego cuando se llame ActualizarAdministrador se hace commit y va a persistir el Administrador actualizado
                if (u != null) {
                    //la funcionalidad de actualizar sirve para cambiar la clave por el momento
                }
            em.getTransaction().commit();
            em.close();
            emf.close();
            return u;
    }
    public Administrador actualizarAdministrador(Administrador administrador) {
            EntityManagerFactory emf =
                    Persistence.createEntityManagerFactory("SiaPersistencia");
            this.em = emf.createEntityManager();
            em.getTransaction().begin();
            Administrador u = em.find(Administrador.class, administrador.getNombreAdm() ); //se usa el entity manager para encontrarlo luego cuando se llame ActualizarAdministrador se hace commit y va a persistir el Administrador actualizado
                if (u != null) {
                    //la funcionalidad de actualizar sirve para cambiar la clave por el momento
                }
            em.getTransaction().commit();
            em.close();
            emf.close();
            return u;
    }
    public Collection<Administrador> encontrarAdministradores() { //encontrar todos los usuarios
           EntityManagerFactory emf =
                    Persistence.createEntityManagerFactory("SiaPersistencia");
           this.em = emf.createEntityManager();
           Query query = em.createQuery("SELECT u FROM Administrador u");// Ojo la sentencia estÃ¡ en Java Query Language, no SQL

           Collection<Administrador> a = query.getResultList(); // me guarda la lista de todos los usuarios en mi coleccion
           em.close();
           emf.close();
           return a;
    }
    public Collection<Administrador> encontrarAdministradoresSinUsuario() {
        EntityManagerFactory emf =
                Persistence.createEntityManagerFactory("SiaPersistencia");
        this.em = emf.createEntityManager();
        Query query = em.createQuery("SELECT a FROM Administrador a WHERE a.nombreUsuario IS NULL");
        Collection<Administrador> a= query.getResultList();
        em.close();
        emf.close();
        return a;
    }


}
